package com.assic.utils.db;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;

import org.nutz.dao.sql.Sql;
import org.nutz.dao.sql.SqlCallback;

import com.assic.utils.vo.QueryResult;

/**
 * @author Kerbores<br>
 *         ReportSqlCallback.java Create at 2014年1月11日<br>
 *         报表查询sql回调实现
 * 
 */
public class ReportSqlCallback implements SqlCallback {

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.nutz.dao.sql.SqlCallback#invoke(java.sql.Connection,
	 * java.sql.ResultSet, org.nutz.dao.sql.Sql)
	 */
	@Override
	public Object invoke(Connection connection, ResultSet rs, Sql sql)
			throws SQLException {
		QueryResult result = new QueryResult();
		List<LinkedHashMap<String, Object>> data = new ArrayList<LinkedHashMap<String, Object>>();
		ResultSetMetaData mate = rs.getMetaData();
		int columns = mate.getColumnCount();
		// 取行数据
		while (rs.next()) {
			// 单行处理
			LinkedHashMap<String, Object> row = new LinkedHashMap<String, Object>();
			for (int i = 1; i <= columns; i++) {
				// 处理单元格 注意区别列数据的表来源
				row.put(mate.getColumnLabel(i), rs.getObject(i));
			}
			// 添加行
			data.add(row);
		}
		// 封装到result
		result.setData(data);
		return result;
	}

}
